package com.scrm.exam.errorcode;

public final class ErrorCode {

    public static ErrorCode SUCCESS = new ErrorCode("200", "请求成功");
    /**
     * 未授权访问
     */
    public static ErrorCode ERR_401_UNAUTHORIZED = new ErrorCode("401", "登录失效，请重新登录");

    /**
     * 其他失败
     */
    public static ErrorCode ERR_500_FAILURE = new ErrorCode("500", "请求失败");

    /**
     * 业务错误
     */
    public static ErrorCode ERR_501_BUSINESS = new ErrorCode("501", "业务处理失败");

    /**
     * 数据处理失败
     */
    public static ErrorCode ERR_502_SQL = new ErrorCode("502", "数据处理失败");

    /**
     * JSON 格式化失败
     */
    public static ErrorCode ERR_503_DATA_FORMAT = new ErrorCode("503", "数据格式化失败");

    /**
     * 日期/时间/时区对象转换或格式化失败
     */
    public static ErrorCode ERR_504_DATETIME_FORMAT = new ErrorCode("504", "日期时间转换或格式化失败");

    /**
     * 网络请求超时
     */
    public static ErrorCode ERR_505_TIMEOUT = new ErrorCode("505", "请求处理超时，请刷新再试");

    /**
     * 网络请求超时
     */
    public static ErrorCode ERR_506_FILE_SIZE_EXCEEDED = new ErrorCode("506", "上传文件大小超过限制");

    /**
     * 数据验证失败
     */
    public static ErrorCode ERR_601_VALID_ERROR = new ErrorCode("601", "参数错误");

    /**
     * 无权限访问
     */
    public static ErrorCode ERR_602_UN_PERMISSION = new ErrorCode("602", "无权限访问");

    /**
     * 参数为空
     */
    public static ErrorCode ERR_701_PARAM_NULL = new ErrorCode("701", "参数为空");

    /**
     * 账号为空
     */
    public static ErrorCode ERR_ADMIN_NULL = new ErrorCode("702", "账号为空");


    /**
     * 导出数据为空
     */
    public static ErrorCode EXPORT_NULL = new ErrorCode("703", "no data");

    /**
     * 返回代码
     */
    private final int code;

    /**
     * 返回消息(如果需要做国际化多语言则是i18n文件的Key)
     */
    private final String message;

    ErrorCode(String code, String message) {
        this.code = Integer.parseInt(code);
        this.message = message;
    }

    /**
     * 远程调用消息（其他非特殊情况，不适用）
     *
     * @param code      错误消息码
     * @param message   返回消息(i18n文件的Key或微服务之间调用的消息)，在不需要做国际化多语言的情况下，直接传message对应的报错信息即可
     * @param unchecked 是否检查消息（微服务之间调用，使用false）
     */
    ErrorCode(int code, String message, boolean unchecked) {
        if (unchecked) {
            throw new IllegalArgumentException("消息错误！");
        }

        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
